<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

</body>
<script>
	// * 基本使用
	// >  与对象解构的语法相比，数组解构就简单多了，它使用的是数组字面量，且解构操作全部在数组内完成，而不是像对象字面量语法一样使用对象的命名属性 。
	// {
	//     const arr = [1,2,3,4];
	//   const [aa,la,xi,haha] = arr;// [1,2,3,4]
	//   console.log(aa,la,xi,haha);// 1 2 3 4
	// }
	// * 忽略元素
	// > 在解构模式中，可以直接省略元素，只为感兴趣的元素提供变量名 。
	// {
	//   const [a,b,c,d] = [1,2,3,4,5,6,7,8];
	//   console.log(a,b,c,d);// 1 2 3 4
	//     const [,bb,,ff] = [1,2,3,4,5,6,7,8];
	//   console.log(bb,ff);// 2 4
	// }

	// *  赋值上下文:对之前定义的变量进行修改（重置）操作。
	// > 数组解构也可用于赋值上下文
	// {
	// 	// let a = 1;
	// 	// let b = 2;// ctrl+l
	// 	// const arr = [10, 20, 30, 40];// ctrl+d
	//     // [a,b] = arr;
	// 	// console.log(a,b);// 10 20
	//
	//     let age = 200;
	// 	const obj = {
	// 		age:400
	//     };
	// 	({age} = obj);
	// 	console.log(age);
	// }

	// * 变量交换
	// > 数组解构语法还有一个独特的用例：交换两个变量的值。在排序算法中，值交换是一个非常常见的操作，如果要在`ES5`中交换两个变量的值，则须引入第三个临时变量
	{
		// let a = 1;
		// let b = 2;
		// [b,a] = [a,b];
	}

	// *  默认值
	// > 也可以在数组解构赋值表达式中为数组中的任意位置添加默认值，当指定位置的属性不存在或其值为undefined时使用默认值
	{
		// const [a,b,c=30,d=40] = [1,2,3];
		// console.log(a,b,c,d);// 1 2 3 40
    }
	// *  嵌套数组解构
	// >  嵌套数组解构与嵌套对象解构的语法类似，在原有的数组模式中插入另一个数组模式，即可将解构过程深入到下一个层级
	// {
	// 	// const [a,b,c,d,e]= [1,2,[3,4,5,6],7,8];
	// 	// console.log(a,b,c,d,e);// 1 2 [3,4,5,6] 7 8
    //
	// 	const [a,b,[c,,m,[n]],d,e]= [1,2,[3,4,5,[6]],7,8];
	// 	console.log(a,b,c,d,e,m,n);// 1 2 3 7 8 5 6
    // }
	// *  不定元素
	// > 函数具有不定参数，而在数组解构语法中有一个相似的概念——不定元素。
    //   在数组中，可以通过...语法将数组中的其余元素赋值给一个特定的变量
	// {
	// 	// const [a,...arr]= [1,2,3,4];
	// 	// console.log(a,arr);// 1 [2 3 4]
    //
    //     // 函数具有不定参数
    //     function fn(...arr){
	// 		console.log(arr);// [1]  [2,3,4,5]
	// 		// console.log(arguments)
    //         // let sum = 0;
    //         // for(let i=0;i<arr.length;i++){
	// 		// 	sum+=arr[i];
    //         // }
    //         // arr.forEach(function(n){
	// 		// 	sum+=n
    //         // })
    //
    //         // [2,3,4,5]
    //         // const sum = arr.reduce(function(m,n){
	// 		// 	console.log(m,n);// 0 2  23  54 95
    //         //     return m+n;// 14
    //         // },0);
	// 		// console.log(sum)
    //     }
	// 	// fn(1);
	// 	fn(2,3,4,5)
    //
    // }

	// *  数组复制
	// > 在`ES5`中，开发者们经常使用`concat()`方法来克隆数组
	// {
	// 	// js 深复制 浅复制
    //  // const arr = [1,2,3,4];
	// 	// const arr2 = arr.concat([100,300]);// 合并数组  [1,2,3,4,100,300]
	// 	// console.log(arr === arr2,arr,arr2);
    //
    //     const arr = [1,2,3,4];
	// 	const arr2 = [...arr,...[100,200],1000];
	// 	console.log(arr === arr2,arr,arr2);// [1,2,3,4,100,200,1000]
    // }
</script>
</html>